跳到主要内容

API

游戏局模式

get_mode_key

获取游戏模式

即在 创作者中心 -> 运营管理 -> 大厅配置 -> 游戏多模式 里面设置的「模式key」。 如果没有配置「模式key」,则返回值可能为空,也可能是空字符串。

注意,这个API只有发布后在真机(或者别的会经过大厅的流程)上测试才管用,编辑器内调试是拿不到的(因为没有经过大厅)

下面的例子用于判断「模式key」是否是endless

local mode_key = base.game.get_mode_key()
if mode_key == 'endless' then
-- endless模式!
else
-- 其它模式
end

另外明确一下,「模式key」是应用到游戏局的,因此不同的「模式key」的玩家一定不会被匹配到同一局

属性

max_level

等级上限

用于英雄升级库,表示单位可以通过经验达到的等级上限。

local level = base.game.max_level

方法

get_winner

获取胜利队伍

由c++实现的api

  • 返回
    • team_id (integer) - 队伍ID
local team_id = base.game:get_winner()

end_game

调了之后会结束游戏,进入「游戏结束」阶段。

在「游戏结束」阶段,所有的计时器、单位、技能、Buff等等都不会被更新(以降低服务器消耗),但「玩家-连入」事件依然会触发,新连入的玩家依然会被同步各属性;自定义协议也依然会被处理。

这个阶段主要是用于游戏结束后给玩家看结算面板用的,如果玩家正好断线了,重连回来的时候游戏已经结束了,他好歹能看看结算面板。

不过这个「游戏结束」阶段的时长在很多模板里配置的是1秒,你可以手动修改,修改方式是:

数据编辑器 -> 项目蓝图 -> 地图设置 -> 默认地图设置 -> 显示更多属性 -> 时间 - 结束

填的数字的单位是毫秒

「游戏结束」阶段结束后,游戏彻底被销毁,玩家不再能连入

由c++实现的api

base.game:end_game()

on_reborn

设置英雄复活

  • 回到参数
    • dead_hero (unit) - 死亡的英雄
  • 回调返回
    • reborn_time (integer) - 复活时间(毫秒)
    • reborn_point (point) - 复活位置

用于脚本库复活英雄,当有单位类型为英雄的单位死亡时会执行回调,并使用回调函数返回的时间与位置来决定复活事件与复活后的位置。复活位置默认为单位死亡时的位置。

base.game:on_reborn(function (hero)
return 10000, hero:get_point()
end)

play_music

播放音乐

由c++实现的api

  • 参数
    • name (string) - 音效名(音效表SoundData.ini里填的那个)
base.game:play_music(name)

play_sound

播放音效。这个api的音效现在是队列而不是打断,感觉有点问题,待之后一起改了

由c++实现的api

  • 参数
    • name (string) - 音效名(音效表SoundData.ini里填的那个)
    • team (integer) - (可选) 队伍ID
    • scene_name (string) - (可选) 场景名,不填则为默认场景。填的话必须把team也填了。另外场景不对听不到声音,其实不太合理,待改进
-- 对所有玩家播放音效
base.game:play_sound(name)

-- 对队伍1的玩家播放音效
base.game:play_sound(name, 1)

player_attribute_add

新增单位属性类型

由c++实现的api

  • 参数
    • name (strnig) 属性名
    • type (int) 类型值(跟Constant.ini属性值取值方式一样)
base.game:player_attribute_add('玩家属性',31)

player_attribute_del

删除单位属性类型

由c++实现的api

  • 参数
    • name (string) 属性名
base.game:player_attribute_del('玩家属性')

player_attribute_sync

设置玩家属性同步方式

由c++实现的api

  • 参数
    • name (string) - 属性名
    • sync (string) - 同步方式

玩家属性见这里。同步方式见这里,默认同步方式为none

base.game:player_attribute_sync('金钱', 'all')

show_timer

设置客户端显示的时间

由c++实现的api

  • 参数
    • time (integer) - 当前时间(毫秒)
    • type (boolean) - 是否是倒计时
base.game:show_timer(50000, true)

set_level_exp

设置升级经验

  • 参数
    • list (table) - 升级所需经验列表

用于英雄升级库,列表中每一项表示英雄从该等级提升到下一等级所需要的经验。设置后,max_level会被设置为列表大小+1。

base.game:set_level_exp
{
100,
200,
300,
400,
}

status

获取游戏阶段

由c++实现的api

  • 返回
    • status (integer) - 游戏阶段
local status = base.game:status()

unit_attribute_max

设置单位属性上限

由c++实现的api

  • 参数
    • state (string) - 单位属性
    • value (number) - 上限值
base.game:unit_attribute_max('移动速度', 600)

只会影响之后创建出来的单位。单位属性的说明见这里

unit_attribute_min

设置单位属性下限

由c++实现的api

  • 参数
    • state (string) - 单位属性
    • value (number) - 下限值
base.game:unit_attribute_min('移动速度', 100)

只会影响之后创建出来的单位。单位属性的说明见这里

unit_attribute_add

新增单位属性类型

由c++实现的api

  • 参数
    • name (strnig) 属性名
    • type (int) 类型值(跟Constant.ini属性值取值方式一样)
base.game:unit_attribute_add('新属性名',31)

unit_attribute_del

删除单位属性类型

由c++实现的api

  • 参数
    • name (string) 属性名
base.game:unit_attribute_del('新属性名')

unit_attribute_sync

设置单位属性同步方式

由c++实现的api

  • 参数
    • state (string) - 单位属性
    • sync (string) - 同步方式

只会影响之后创建出来的单位。单位属性见这里。同步方式见这里,默认同步方式为none

base.game:unit_attribute_sync('护盾', 'all')

wtf

无限火力

由c++实现的api

  • 参数
    • enable (boolean) - 开/关
  • 返回
    • is_enable (boolean) - 目前的开关状态

令技能无冷却无消耗。

base.game.wtf(true)

keep_alive (支持时间:20190808)

使这局游戏局至少再存活参数指定的时间,不管其它所有条件。即就算其它结束游戏的条件满足了,也会等到keep_alive的时间到了才结束

由c++实现的api

  • 参数
    • keep_alive_seconds (number) - 从现在开始,至少再存活keep_alive_seconds秒
  • 返回
base.game.keep_alive(30 * 60)

cancel_keep_alive (支持时间:20190808)

取消之前所有的keep_alive操作

由c++实现的api

  • 参数
base.game.cancel_keep_alive()

filter_word

文字和谐处理。屏蔽字会被处理成星号(*)

由c++实现的api

  • 参数
    • words (string) 要处理的文字
  • 返回
    • processed_words (string) 处理后的文字
local processed_words = base.game.filter_word('you are sb')

time_stop

时间停止。除了被标记了免时停的单位,其它逻辑都会停止(包括全局的timer)。时停期间除了单位不tick,全局的tick也不会进,timer也不算算时间,mover也不会移动,但依然可以创建新的单位(只是他们不会被tick)。

客户端也一样,会暂停游戏场景里没有被标记免时停的单位,但UI不受影响。

该方法被调用后,本帧尚未被tick的单位、timer和其它东西依然会被tick。即从下一帧才开始正式起作用。这么设计是担心当前帧有一半单位tick了有一半没tick。

由c++实现的api

  • 参数
    • time_stop_seconds (number) - (可选) 从现在开始,时间停止time_stop_seconds秒。如果时停期间再次调用本方法,这个时间会被覆盖,而不是延长。如果不填这个参数,则表示一直停止,直到手动恢复。时间填0没有效果。填一个小于1帧的时间的话,效果等价于时间停止1帧。
base.game.time_stop()

cancel_time_stop

取消时间停止。和time_stop类似,也是下一帧才生效。即本帧只会tick被标记了免时停的单位

由c++实现的api

  • 参数

get_session_id

返回游戏局ID,此ID全局唯一且2038年前必定不会重复

由c++实现的api

  • 参数
  • 返回值
    • game_session_id(int64)

load_scene

加载场景

该方法是同步的(阻塞的),根据相关数据文件的大小,可能会卡几百乃至几千毫秒,因此调用前建议处理好客户端相关表现(比如转个圈之类的)

由c++实现的api

  • 参数
    • scene_name(string) - 场景名称
  • 返回
    • ret_value(int)
      • 如果加载成功,则返回0
      • 场景之前已经加载过,则返回1(如果scene_name参数没传,也会返回1)
      • 场景数据文件损坏,则返回2
local ret = base.game.load_scene('scene_name')

close_scene

释放指定场景,当前场景有玩家存在的时候,不能释放; 场景被成功释放或者本就不存在的时候,返回true;

由c++实现的api

  • 参数
    • scene_name(string)
  • 返回
    • success(bool)
local success = base.game.close_scene('scene_name')

get_all_scene_name

获取游戏中所有场景的名称

由c++实现的api

  • 返回
    • scene_names(talbe)
local scene_names = base.game.get_all_scene_name()

get_default_units

获取游戏中所有场景的默认单位

现在获取的表中包含用默认单位信息创建出来的单位,该单位可能为空 由c++实现的api

  • 参数
    • scene_name(string) 选填,不填的话返回所有(已加载)场景的默认单位
  • 返回
    • default_units(talbe) 被询问场景的单位表,获取某个场景的单位表用 default_units['scene_name']
local default_units = base.game.get_default_units('scene_name')
local scene_units = default_units['scene_name']
local default_unit = scene_units[index].unit

get_default_unit

通过node_mark获取游戏中的默认单位

由c++实现的api 主要是触发编辑器使用

  • 参数
    • node_mark(string)默认单位的node_mark
  • 返回
    • default_unit(unit) 被询问的node_mark的对应单位,如果对应node_mark的单位不存在(没有被创建、或者已经被删除),会返回nil

下面是两种获取default_unit的方法,显然自己写的话用第一种就行了; 触发编辑器因为存了node_mark,所以是用第二种方法获取。

local default_units = base.game.get_default_units('scene_name')
local default_unit = default_units['scene_name'][index].unit
local default_units = base.game.get_default_units('scene_name')
local node_mark = default_units['scene_name'][index].node_mark
local default_unit = base.game.get_default_unit(node_mark)

set

设置(游戏局)属性,并同步给客户端。如果此时客户端并不在线,那么等他登录(或重连)后会拿到那时最新的游戏局属性。会通过游戏-属性变化事件通知给客户端Lua。

由c++实现的api

  • 参数
    • key (string) - 属性名称
    • value (string) - 属性的值。(暂时只提供了字符串类型的值,认为够用了)
base.game.set('map', '2')

enable_ai/disable_ai

开启关闭ai

由c++实现的api

base.game.enable_ai()

mover_line/mover_target/add_damage

同skill里同名函数

base.game.mover_line(...)

set_game_speed

设置服务器一个逻辑帧内的更新次数,默认为1

由c++实现的api

  • 参数
    • speed (int) - 一个逻辑帧的更新次数
base.game.set_game_speed(3)

set_session_start_time

设置游戏局开始的时间戳, 可以通过os.time获取想要的时间戳

由c++实现的api

  • 参数
    • timestamp (int) - 开始的时间戳
base.game.set_session_start_time(timestamp)